<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

</body>
</html>
<script>
    (function(){
        function Observer(){
            this.obj = {}
            this.on = function(type,handler){//订阅消息
                // type:用来保存该消息类型
                // handler:用来接收消息的函数
                this.obj[type] = (this.obj[type]?this.obj[type]:[])
                // this.obj[type] = this.obj[type] || []
                this.obj[type].push(handler)
            }
            // 发布消息
            this.emit = function(type,msg){
                // 拿到type对应这个类型消息的所有订阅者的回调函数，调用该函数并将消息传给订阅者
                if(this.obj[type]){
                    this.obj[type].forEach((item) => {
                        item(msg)
                    })
                }
                //另一种写法
                    // 将if判断可以简化为&&与表达式
                    // this.obj[type] &&
                    // this.obj[type].forEach((item)=>{
                    //     item(msg)
                    // })
            }
        }
        window.Observer = Observer;//暴露函数到外面
    })()
    // 实例化对象
    var os = new Observer()
    // 订阅消息
    os.on('lijiaqi',function(msg){
            //这里接收来自发布者的消息 msg
            console.log('李莉 收到了来自lijiaqi的消息: ' + msg);
        })
    //订阅消息
    os.on('lijiaqi',function(msg){
            //这里接收来自发布者的消息 msg
            console.log('林峰 收到了来自lijiaqi的消息: ' + msg);
        })
    //订阅消息
    os.on('lijiaqi',function(msg){
            //这里接收来自发布者的消息 msg
            console.log('何田 收到了来自lijiaqi的消息: ' + msg);
        })
    console.log(os);
     //发布消息
     os.emit('lijiaqi','本月11号在淘宝抖音进行大型直播特卖！')
</script>